package middleware

import (
	"go-jhb-admin-api/app/utils"
	"go-jhb-admin-api/config"
	"strconv"

	"github.com/gin-gonic/gin"
)

func AuthMiddleware() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 后台鉴权
		token := c.GetHeader("ADMIN-TOKEN")
		if token == "" {
			utils.ErrorResponse(c, nil, "请先登录", 10001)
			c.Abort() // 阻止请求继续处理
			return
		}

		// 验证token是否有效
		id, err := config.Get("adm_token_" + token)

		if err != nil || id == "" {
			utils.ErrorResponse(c, nil, "请重新登录", 10001)
			c.Abort() // 阻止请求继续处理
			return
		}

		// 将字符串转换为 uint 类型
		adminIDUint64, err := strconv.ParseUint(id, 10, 0) // 0 位数，自动选择合适的大小
		if err != nil {
			utils.ErrorResponse(c, nil, "ERROR:"+err.Error(), 10001)
			c.Abort() // 阻止请求继续处理
			return
		}

		// 将 uint64 转换为 uint
		adminIDUint := uint(adminIDUint64)

		c.Set("admin_id", adminIDUint)

		// TODO 查询管理员信息及状态是否正常

		// 如果通过鉴权，继续处理请求
		c.Next()
	}
}
